#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <nodelist.h>
#include <threadpool.h>
#include <heartBeat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <signal.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
#include <errmessage.h>
#include <pthread.h>

/*
*	函数功能：		心跳定时执行函数
*	函数参数	：	定时信号
*	函数返回值：无
*/
static void heartbeat_handler(int p)
{
	PT_nodeList me = p_tNodeListHead;
	long long current_time = time(NULL);

	me = me->next;
	pthread_mutex_lock(&g_pthreadPool->mutex);
	while(me!=NULL)
	{
		if((current_time - me->lastUpdateTime) >=HEARTBEATSEC)
		{	
			err_message(me->client_fd,TIMEOUT_ERR);
			nodeList_delNode_unLock(me->client_fd);
		}
		me = me->next;
	}
	pthread_mutex_unlock(&g_pthreadPool->mutex);
}

/*
*	函数功能：		心跳定时器初始化
*	函数参数	：	无
*	函数返回值：无
*/
void heartbeatInit(void)
{
	struct itimerval timer;
	signal(SIGALRM,heartbeat_handler);
  
	timer.it_interval.tv_sec = HEARTBEATDETECSEC;
	timer.it_interval.tv_usec = 0;
	timer.it_value.tv_sec = HEARTBEATDETECSEC;
	timer.it_value.tv_usec = 0;
	setitimer(ITIMER_REAL,&timer,NULL);
}

